package lenybxb

import "fmt"

/**
 * @ProjectName: go-test
 * @PackageName: lenybxb
 * @Description: 字符串的遍历
 * @Author: hy.bai
 * @Date: 2025-07-18 11:40
 */
func TestFor() {
	var s = "hello张三"                  // 底层是byte数组，每个英文字符是1，每个中文长度是3。
	fmt.Printf("字符串的长度是：%d\n", len(s)) // 长度是11
	// 字符串默认会自动转换为byte数组
	// 第一种for循环
	for i := 0; i < len(s); i++ {
		fmt.Printf("元素的类型是：%T, 元素的值是：%v\n", s[i], s[i])
		// 打印结果是：元素的类型是：uint8, 元素的值是：137
	}
	fmt.Println("")
	// 第二种for循环
	var rs = []rune(s) // 字符串转换成rune数组
	for j := 0; j < len(rs); j++ {
		fmt.Print(string(rs[j]), "*") // 打印结果：h*e*l*l*o* *张*三*
	}

	fmt.Println("")
	// 第三种for循环，结果是转换成rune数组
	// 常用于遍历切面、map、channel
	for _, val := range s {
		// 注意：如果没有用到index时会报错，可以使用"_"代替,
		// 下划线(_)是一个特殊的标识符，通常用于忽略变量或函数返回值。
		fmt.Printf("类型是：%T, 值是：%v\n", val, val)
		// 打印结果是：索引是：8, 类型是：int32, 值是：19977
	}

}
